/**
 * @file         bsc_netlink_framework.h
 * @brief        NetLink框架，管理项目中所有联网芯片
 * @note         对外公布
 * @author       Jpz(jinpuzhao@hopechart.com, 靳普诏)
 * @data         2022-9-7
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2022-9-7    <td>1.0                   <td>Jpz             <td>创建初始版本
 * <tr><td>2022-11-23  <td>1.1                   <td>Jpz             <td>暂时修复EC800G平台 caNetOpened 查询异常问题
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */


#ifndef _BSC_NETLINK_FRAMEWORK_H_
#define _BSC_NETLINK_FRAMEWORK_H_

#include "ofc/ofc_types.h"
#include "bsc_netlink/bsc_netlink_modem.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 初始化
 * @note 内部依赖用户自定义的 BsNetlinkFrameCfgInit()
 * @return 成功 >= 0
 *         失败 <  0 参考错误码
 */
Int32 BsNetlinkFramworkInit(void);


/**
 * 运行驱动联网模块打开操作，用于驱动联网芯片状态更新，触发用户自定义属性设置(@ref BsNetlinkModemSetAttr())
 * @return 
 */
void BsNetlinkFramworkRunOnce(void);


/**
 * 去初始化
 * @return 
 */
void BsNetlinkFramworkDone(void);


/// ~~~~~~~~~~~~~ 联网芯片相关操作 ~~~~~~~~~~~~~~

/**
 * 需要单独调用线程执行 （对应 ATChipDeal() ）
 * @param modem_id 联网模块id, 参考(@ref TBsNetlinkConst)[@file bsc_netlink_enum.h]
 * @return 
 */
void BsNetlinkFramworkModemDeal(UInt32 modem_id);

/**
 * 在联网模块管理器中增加联网模块
 * @param modem: 联网模块对象
 * @return  >   0,  成功 返回模块id, 参考(@ref TBsNetlinkConst)[@file bsc_netlink_enum.h]
 *          <   0,  失败 (参考错误码)
 */
Int32 TBsNetlinkFrameAddModem(TBsNetlinkModem *modem);

/**
 * 在联网模块管理器中删除联网模块
 * @param modem_id: 联网模块id, 参考(@ref TBsNetlinkConst)[@file bsc_netlink_enum.h]
 * @return
 */
void TBsNetlinkFrameDelModem(UInt8 modem_id);


/**
 * 联网模块是否被添加
 * @param modem_id: 联网模块id, 参考(@ref TBsNetlinkConst)[@file bsc_netlink_enum.h]
 * @return  成功，返回对应模块句柄
 *          失败，NULL
 */
TBsNetlinkModem *TBsNetlinkFrameModemIsAdded(UInt8 modem_id);



/**
 * 当前模组功能模式
 * @param modem_id: 联网模块id, 参考(@ref TBsNetlinkConst)[@file bsc_netlink_enum.h]
 * @return  >= 0 成功. 0:最小模式，1:正常模式，4:飞行模式，6:重启
 *          < 0  失败
 */
Int32 TBsNetlinkFrameModemFuncMode(UInt8 modem_id);

/**
 * 当前模组的系统模式(字符串信息)
 * @param modem_id: 联网模块id, 参考(@ref TBsNetlinkConst)[@file bsc_netlink_enum.h]
 * @param ret_code: >= 0, 成功. 字符串长度
 *                  <  0, 获取失败
 * @return != NULL 字符串地址
 *         == NULL 获取失败
 * @note System mode, values: “NO SERVICE”, “GSM”, “WCDMA”, “LTE”, “TDS”…
         由外部实现功能
 */
const char *TBsNetlinkFrameModemSystemMode(UInt8 modem_id, Int32 *ret_code);

#ifdef __cplusplus
}  //extern "C" {
#endif

#endif
